package train.DAY624;


import javax.swing.tree.TreeNode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LeetCode624 {
    public static void main(String[] args) {
//        int[][] a={{1,2},{3,4}};
//        int[][] ints = matrixRe(a, 4, 1);
//        for (int i = 0; i < ints.length; i++) {
//            for (int j = 0; j < ints[0].length; j++) {
//                System.out.print(ints[i][j]+"\t");
//            }
//            System.out.println();
//        }
String s="a";
String b="ab";
        System.out.println(isAnagram(s, b));

    }
    //电话号码
    public static List<String> letterCombin(String digits){
        List<String> list = new ArrayList<>();
        HashMap<Character, String> map = new HashMap<>();
        StringBuffer buffer = new StringBuffer();
        map.put('2',"abc");
        map.put('3',"def");
        map.put('4',"ghi");
        map.put('5',"jkl");
        map.put('6',"mno");
        map.put('7',"pqrs");
        map.put('8',"tuv");
        map.put('9',"wxyz");
     diGui(list,buffer,0,digits,map);
     return list;
    }
    public static void diGui(List<String> list,StringBuffer buffer,int index,String digits,HashMap<Character, String> map){
        if(index==digits.length())
            list.add(buffer.toString());
        else{
            char c = digits.charAt(index);
            String s = map.get(c);
            for (int i = 0; i < s.length(); i++) {
                buffer.append(s.charAt(i));
                diGui(list,buffer,index+1,digits,map);
                buffer.deleteCharAt(index);
            }
        }
    }

    //矩阵对角线元素和
    public  int diagSum(int[][] mat){
        int sum=0;
        int length=mat.length;
        int x=0,y=length-1;
            for (int i = 0; i < length; i++) {
                sum+=mat[i][i];
            }

        if(length%2==0){
            while(x<length&&y>=0){
                sum+=mat[x][y];
                x++;
                y--;
            }
        }else{
              while(x<length&&y>=0){
                  if(x==y) {
                     x++;
                     y--;
                     continue;
                  }
                  sum+=mat[x][y];
                  x++;
                  y--;
              }
            }

        return sum;
    }
    //重塑矩阵
    public  int[][] matrixRe(int[][] mat,int r,int c){
        int x=mat.length;
        int y=mat[0].length;
        int[][] a=new int[r][c];
        int length=0;
        int depth=0;
        if(x*y==r*c){
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < y; j++) {
                    if(depth<c){
                        a[length][depth]=mat[i][j];
                        depth++;
                    } else{
                        depth=0;
                        length++;
                        a[length][depth]=mat[i][j];
                        depth++;
                    }
                }
            }

        }else {
            return mat;
        }
        return a;
    }
    //丢失的数字
    public static int missNumber(int[] nums){
        int length= nums.length;
        int[] a=new int[length+1];
        boolean b=false;
        for (int i = 0; i < length; i++) {
            if(nums[i]==0) b=true;
            a[nums[i]]=1;
        }
        if(b){
            for (int i = 1; i <=length; i++) {
                if(a[i]!=1) return i;
            }
        }else{
            return 0;
        }
        return 1;
    }

    //Excel表列序号
    public static int titleTo(String columnTitle){
        char[] chars = columnTitle.toCharArray();
        int res=0;
        for (int i = 0; i < chars.length; i++) {
            res=res*26+(chars[i]-'A'+1);
        }
        return res;
    }

    //同构字符串
    public static boolean isIsom(String s,String t){
//        if(s.length()!=t.length()) return false;
//        else{
//            String a;
//            StringBuffer buffer = new StringBuffer();
//            boolean c=false;
//            List<String> list = new ArrayList<>();
//            for (int i = 0; i < s.length(); i++) {
//                buffer.append(s.charAt(i));
//                buffer.append(t.charAt(i));
//                a= String.valueOf(buffer);
//                for (int j = 0; j < list.size(); j++) {
//                    if(a.charAt(0)== list.get(j).charAt(0)){
//                        if(list.get(j).charAt(1)!=a.charAt(1))
//                            return false;
//                    else{
//                        c=true;
//                    }
//                   }
//                }
//                if(!c)  list.add(a);
//                buffer.delete(0, buffer.length());
//                a=null;
//            }
//        }
//        return true;
        Map<Character, Character> st = new HashMap<>(), ts = new HashMap<>();
        char a, b;
        for (int i = 0; i < s.length(); ++i) {
            a = s.charAt(i);
            b = t.charAt(i);
            if (st.containsKey(a) && st.get(a) != b || ts.containsKey(b) && ts.get(b) != a) {
                return false;
            }
            st.put(a, b);
            ts.put(b, a);
        }
        return true;


    }

    //有效的字母异位词
    public static boolean isAnagram(String s,String t){
//        char[] char1 = s.toCharArray();
//        char[] char2 = t.toCharArray();
//        if(char1.length!=char2.length)
//            return false;
//        paiXu(char1);
//        paiXu(char2);
//        for (int i = 0; i < char1.length; i++) {
//            if(char1[i]!=char2[i])
//                return false;
//        }
//        return true;

        if(s.length() != t.length())
            return false;
        int[] alpha = new int[26];
        for(int i = 0; i< s.length(); i++) {
            alpha[s.charAt(i) - 'a'] ++;
            alpha[t.charAt(i) - 'a'] --;
        }
        for(int i=0;i<26;i++)
            if(alpha[i] != 0)
                return false;
        return true;

    }
    public static char[] paiXu(char[] a){
        char temp;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length-i-1; j++) {
                if(a[j]>a[j+1]){
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        return a;
    }

    //二叉树所有路径
//   public List<String> binaryTree(TreeNode root){
//        List<String> path=new ArrayList<>();
//        constructPath(root,"",path);
//        return path;
//   }

//   public void constructPath(TreeNode root,String paths,List<String> path){
//        if(root!=null){
//            StringBuffer buffer = new StringBuffer(paths);
//            buffer.append(root.val);
//            if(root.left==null&&root.right==null)
//                path.add(buffer.toString());
//            else{
//                buffer.append("->");
//                constructPath(root.left,buffer.toString(),path);
//                constructPath(root.right, buffer.toString(), path);
//            }
//        }
//
//   }


}
